home *** CD-ROM | disk | FTP | other *** search
- package java.util;
-
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.io.Serializable;
- import java.security.MessageDigest;
- import java.security.NoSuchAlgorithmException;
- import java.security.SecureRandom;
-
- public final class UUID implements Serializable, Comparable<UUID> {
- private static final long serialVersionUID = -4856846361193249489L;
- private final long mostSigBits;
- private final long leastSigBits;
- private transient int version = -1;
- private transient int variant = -1;
- private transient volatile long timestamp = -1L;
- private transient int sequence = -1;
- private transient long node = -1L;
- private transient int hashCode = -1;
- private static volatile SecureRandom numberGenerator = null;
-
- private UUID(byte[] var1) {
- long var2 = 0L;
- long var4 = 0L;
-
- assert var1.length == 16;
-
- for(int var6 = 0; var6 < 8; ++var6) {
- var2 = var2 << 8 | (long)(var1[var6] & 255);
- }
-
- for(int var7 = 8; var7 < 16; ++var7) {
- var4 = var4 << 8 | (long)(var1[var7] & 255);
- }
-
- this.mostSigBits = var2;
- this.leastSigBits = var4;
- }
-
- public UUID(long var1, long var3) {
- this.mostSigBits = var1;
- this.leastSigBits = var3;
- }
-
- public static UUID randomUUID() {
- SecureRandom var0 = numberGenerator;
- if (var0 == null) {
- numberGenerator = var0 = new SecureRandom();
- }
-
- byte[] var1 = new byte[16];
- var0.nextBytes(var1);
- var1[6] = (byte)(var1[6] & 15);
- var1[6] = (byte)(var1[6] | 64);
- var1[8] = (byte)(var1[8] & 63);
- var1[8] = (byte)(var1[8] | 128);
- return new UUID(var1);
- }
-
- public static UUID nameUUIDFromBytes(byte[] var0) {
- MessageDigest var1;
- try {
- var1 = MessageDigest.getInstance("MD5");
- } catch (NoSuchAlgorithmException var3) {
- throw new InternalError("MD5 not supported");
- }
-
- byte[] var2 = var1.digest(var0);
- var2[6] = (byte)(var2[6] & 15);
- var2[6] = (byte)(var2[6] | 48);
- var2[8] = (byte)(var2[8] & 63);
- var2[8] = (byte)(var2[8] | 128);
- return new UUID(var2);
- }
-
- public static UUID fromString(String var0) {
- String[] var1 = var0.split("-");
- if (var1.length != 5) {
- throw new IllegalArgumentException("Invalid UUID string: " + var0);
- } else {
- for(int var2 = 0; var2 < 5; ++var2) {
- var1[var2] = "0x" + var1[var2];
- }
-
- long var6 = Long.decode(var1[0]);
- var6 <<= 16;
- var6 |= Long.decode(var1[1]);
- var6 <<= 16;
- var6 |= Long.decode(var1[2]);
- long var4 = Long.decode(var1[3]);
- var4 <<= 48;
- var4 |= Long.decode(var1[4]);
- return new UUID(var6, var4);
- }
- }
-
- public long getLeastSignificantBits() {
- return this.leastSigBits;
- }
-
- public long getMostSignificantBits() {
- return this.mostSigBits;
- }
-
- public int version() {
- if (this.version < 0) {
- this.version = (int)(this.mostSigBits >> 12 & 15L);
- }
-
- return this.version;
- }
-
- public int variant() {
- if (this.variant < 0) {
- if (this.leastSigBits >>> 63 == 0L) {
- this.variant = 0;
- } else if (this.leastSigBits >>> 62 == 2L) {
- this.variant = 2;
- } else {
- this.variant = (int)(this.leastSigBits >>> 61);
- }
- }
-
- return this.variant;
- }
-
- public long timestamp() {
- if (this.version() != 1) {
- throw new UnsupportedOperationException("Not a time-based UUID");
- } else {
- long var1 = this.timestamp;
- if (var1 < 0L) {
- long var3 = (this.mostSigBits & 4095L) << 48;
- long var4 = var3 | (this.mostSigBits >> 16 & 65535L) << 32;
- var1 = var4 | this.mostSigBits >>> 32;
- this.timestamp = var1;
- }
-
- return var1;
- }
- }
-
- public int clockSequence() {
- if (this.version() != 1) {
- throw new UnsupportedOperationException("Not a time-based UUID");
- } else {
- if (this.sequence < 0) {
- this.sequence = (int)((this.leastSigBits & 4611404543450677248L) >>> 48);
- }
-
- return this.sequence;
- }
- }
-
- public long node() {
- if (this.version() != 1) {
- throw new UnsupportedOperationException("Not a time-based UUID");
- } else {
- if (this.node < 0L) {
- this.node = this.leastSigBits & 281474976710655L;
- }
-
- return this.node;
- }
- }
-
- public String toString() {
- return digits(this.mostSigBits >> 32, 8) + "-" + digits(this.mostSigBits >> 16, 4) + "-" + digits(this.mostSigBits, 4) + "-" + digits(this.leastSigBits >> 48, 4) + "-" + digits(this.leastSigBits, 12);
- }
-
- private static String digits(long var0, int var2) {
- long var3 = 1L << var2 * 4;
- return Long.toHexString(var3 | var0 & var3 - 1L).substring(1);
- }
-
- public int hashCode() {
- if (this.hashCode == -1) {
- this.hashCode = (int)(this.mostSigBits >> 32 ^ this.mostSigBits ^ this.leastSigBits >> 32 ^ this.leastSigBits);
- }
-
- return this.hashCode;
- }
-
- public boolean equals(Object var1) {
- if (!(var1 instanceof UUID)) {
- return false;
- } else if (((UUID)var1).variant() != this.variant()) {
- return false;
- } else {
- UUID var2 = (UUID)var1;
- return this.mostSigBits == var2.mostSigBits && this.leastSigBits == var2.leastSigBits;
- }
- }
-
- public int compareTo(UUID var1) {
- return this.mostSigBits < var1.mostSigBits ? -1 : (this.mostSigBits > var1.mostSigBits ? 1 : (this.leastSigBits < var1.leastSigBits ? -1 : (this.leastSigBits > var1.leastSigBits ? 1 : 0)));
- }
-
- private void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
- var1.defaultReadObject();
- this.version = -1;
- this.variant = -1;
- this.timestamp = -1L;
- this.sequence = -1;
- this.node = -1L;
- this.hashCode = -1;
- }
- }
-